#ifndef _OCACTOR_H_
#define _OCACTOR_H_

#include "transformComponent.h"
#include "base/threadsafe_vector.h"

using USeqContainer = ThreadSafe_Vector<Component *>;

class Actor : public Object
{
public:
    Actor();
    virtual ~Actor();

    //生命周期函数：创建后
    //此函数在角色创建后被调用
    //值得注意的是，角色被注册到世界和角色被实际创建是两个时机，而非同一时刻
    //当角色注册到世界时，将在合适的时机被创建出来，此时才在内存中实际拥有空间，仅注册的角色不占用空间，也不会进行任何更新操作
    virtual void onCreated();
    //生命周期函数：更新时
    //此函数在引擎系统更新时被调用，按照角色创建先后顺序进行更新，期望是每一帧被调用
    virtual void onUpdate(uint64 tick);
    //生命周期函数：销毁后
    //此函数在角色被销毁后调用
    //值得注意的是，角色销毁仅仅是从世界中删除，而非直接从内存中销毁，回收内存会由引擎在合适的时机回收
    virtual void onDestroyed();

    //

    uBoolean AddComponent(Component* component);
    uBoolean DelComponent(Component* component);
    uBoolean HasComponent(const uString& name);

protected:
    string m_name;
    USeqContainer m_components;
};

#endif